home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 21 / CU Amiga Magazine's Super CD-ROM 21 (1998)(EMAP Images)(GB)[!][issue 1998-04].iso / CUCD / Programming / EasyPLUGINs / source / popasl.e < prev    next >
Encoding:
Text File  |  1997-12-15  |  10.1 KB  |  329 lines

  1. /*
  2. **
  3. ** popasl PLUGIN
  4. **
  5. ** Copyright: Ralph Wermke of Digital Innovations
  6. ** EMail    : wermke@gryps1.rz.uni-greifswald.de
  7. ** WWW      : http://www.user.fh-stralsund.de/~rwermke/di.html
  8. **
  9. ** Version  : 1.1
  10. ** Date     : 15-Dec-1997
  11. **
  12. ** ProgramID: 0007
  13. **
  14. ** History:
  15. **    10-Nov-1997:      [1.0]
  16. **       - initial release
  17. **    15-Nov-1997:      [1.0.1]
  18. **       - object name changed to popasl_plugin
  19. **    15-Dec-1997:      [1.1]
  20. **       - two new tags added
  21. **         PLA_PopAsl_ButtonOnRight    [I..]
  22. **         PLA_PopAsl_NoFontExtension  [I..]
  23. **
  24. */
  25.  
  26. OPT OSVERSION=38
  27. OPT PREPROCESS
  28. OPT MODULE
  29.  
  30. MODULE 'tools/easygui','tools/textlen',
  31.        'graphics/text',
  32.        'intuition/intuition','intuition/gadgetclass',
  33.        'utility/tagitem','utility',
  34.        'gadtools',
  35.        'libraries/gadtools','libraries/asl',
  36.        'asl'
  37.  
  38. EXPORT OBJECT popasl_plugin OF plugin
  39. PRIVATE
  40.    string      : PTR TO CHAR
  41.    type
  42.    disabled
  43.  
  44.    gad_str     : PTR TO gadget
  45.    gad_bt      : PTR TO gadget
  46.    id_str
  47.    id_bt
  48.    bt_width
  49.    bt_text     : PTR TO CHAR
  50.    buttonright
  51.    noext
  52.    imsg        : PTR TO intuimessage
  53.  
  54.    ta          : PTR TO textattr
  55. ENDOBJECT
  56.  
  57. -> TAG_USER  | PROG_ID<<16 | TAG_VALUE
  58. -> $80000000 |   $0007<<16 | 0...
  59.  
  60. EXPORT ENUM PLA_PopAsl_Disabled=$80070001,
  61.             PLA_PopAsl_Contents,
  62.             PLA_PopAsl_GadgetID,
  63.             PLA_PopAsl_ButtonText,
  64.             PLA_PopAsl_Type,
  65.             PLA_PopAsl_ButtonOnRight,
  66.             PLA_PopAsl_NoFontExtension
  67.  
  68. EXPORT ENUM PLV_PopAsl_Type_Drawer=0,
  69.             PLV_PopAsl_Type_File,
  70.             PLV_PopAsl_Type_Font
  71. ->     ,PLV_PopAsl_Type_Screen
  72.  
  73.  
  74. ->-- Constructor/ Destructor ---------------------------------
  75.  
  76. ->>> popasl::popasl (Constructor)
  77. PROC popasl(tags=NIL:PTR TO tagitem) OF popasl_plugin
  78. DEF x
  79.  
  80.    IF utilitybase:=OpenLibrary('utility.library', 37)
  81.       self.disabled     :=GetTagData(PLA_PopAsl_Disabled, FALSE, tags)
  82.       self.string       :=GetTagData(PLA_PopAsl_Contents, '', tags)
  83.       self.id_bt        :=GetTagData(PLA_PopAsl_GadgetID, And(Shr(self,4),$FFFF), tags)
  84.       self.type         :=GetTagData(PLA_PopAsl_Type, PLV_PopAsl_Type_Drawer, tags)
  85.       self.bt_text      :=GetTagData(PLA_PopAsl_ButtonText, NIL, tags)
  86.       self.buttonright  :=GetTagData(PLA_PopAsl_ButtonOnRight, FALSE, tags)
  87.       self.noext        :=GetTagData(PLA_PopAsl_NoFontExtension, FALSE, tags)
  88.  
  89.       IF (self.bt_text=NIL)
  90.          x:=self.type
  91.          SELECT x
  92.             CASE PLV_PopAsl_Type_Drawer
  93.                self.bt_text:='Path...'
  94.             CASE PLV_PopAsl_Type_File
  95.                self.bt_text:='File...'
  96.             CASE PLV_PopAsl_Type_Font
  97.                self.bt_text:='Font...'
  98. ->            CASE PLV_PopAsl_Type_Screen
  99. ->               self.bt_text:='Screen...'
  100.             DEFAULT
  101.                Raise("TYPE")
  102.          ENDSELECT
  103.       ENDIF
  104.  
  105.       self.id_str:=self.id_bt+1
  106.  
  107.       CloseLibrary(utilitybase)
  108.    ELSE
  109.       Raise("UTIL")
  110.    ENDIF
  111.  
  112. ENDPROC
  113. -><<
  114.  
  115. ->>> popasl::end (Destructor)
  116. PROC end() OF popasl_plugin
  117.    IF self.string THEN Dispose(self.string)
  118. ENDPROC
  119. -><<
  120.  
  121. ->-- overridden methods --------------------------------------
  122.  
  123. ->>> popasl::will_resize
  124. PROC will_resize() OF popasl_plugin IS RESIZEX
  125. -><<
  126.  
  127. ->>> popasl::min_size
  128. PROC min_size(ta:PTR TO textattr, fh) OF popasl_plugin
  129.    self.bt_width:=textlen(self.bt_text,ta)+8
  130. ENDPROC (self.bt_width+(fh*8)),(fh+6)
  131. -><<
  132.  
  133. ->>> popasl::gtrender
  134. PROC gtrender(gl, vis, ta:PTR TO textattr, x, y, xs, ys, win:PTR TO window) OF popasl_plugin
  135. DEF ng_bt, ng_str
  136.  
  137.    IF self.buttonright
  138.       ng_bt :=[x+xs-self.bt_width+1, y, self.bt_width, ys, self.bt_text, ta, self.id_bt, 0, vis, 0]:newgadget
  139.       ng_str:=[x, y, xs-self.bt_width, ys, NIL, ta, self.id_str, 0, vis, 0]:newgadget
  140.    ELSE
  141.       ng_bt :=[x, y, self.bt_width, ys, self.bt_text, ta, self.id_bt, 0, vis, 0]:newgadget
  142.       ng_str:=[x+self.bt_width+1, y, xs-self.bt_width, ys, NIL, ta, self.id_str, 0, vis, 0]:newgadget
  143.    ENDIF
  144.  
  145.    self.gad_bt:=CreateGadgetA(BUTTON_KIND, gl,
  146.                               ng_bt,
  147.                               [GA_DISABLED, self.disabled, TAG_DONE])
  148.  
  149.    self.gad_str:=CreateGadgetA(STRING_KIND, self.gad_bt,
  150.                                ng_str,
  151.                                [GA_DISABLED, self.disabled,
  152.                                 GTST_MAXCHARS, 350,
  153.                                 GTST_STRING, self.string,
  154.                                 TAG_DONE])
  155. ENDPROC self.gad_str
  156. -><<
  157.  
  158. ->>> popasl::clear_render
  159. PROC clear_render(win:PTR TO window) OF popasl_plugin
  160. DEF buffer:REG
  161.  
  162.    buffer:=self.gad_str.specialinfo::stringinfo.buffer
  163.    Dispose(self.string)
  164.    self.string:=String(StrLen(buffer)+1)
  165.    StrCopy(self.string, buffer)
  166.  
  167. ENDPROC
  168. -><<
  169.  
  170. ->>> popasl::message_test
  171. PROC message_test(imsg:PTR TO intuimessage, win:PTR TO window) OF popasl_plugin
  172.  
  173.    self.imsg:=0
  174.    IF imsg.class=IDCMP_GADGETUP
  175.       IF (imsg.iaddress=self.gad_bt) OR (imsg.iaddress=self.gad_str)
  176.          self.imsg:=imsg
  177.          RETURN TRUE
  178.       ENDIF
  179.    ENDIF
  180.  
  181. ENDPROC FALSE
  182. -><<
  183.  
  184. ->>> popasl::message_action
  185. PROC message_action(class, qual, code, win:PTR TO window) OF popasl_plugin
  186. DEF filereq:PTR TO filerequester, fontreq:PTR TO fontrequester,
  187.     res, len, buffer:REG, tags, x, s1=NIL:PTR TO CHAR, reqtype,
  188.     s=NIL:PTR TO CHAR
  189.  
  190.    IF self.imsg
  191.       buffer:=self.gad_str.specialinfo::stringinfo.buffer
  192.       IF self.imsg.iaddress=self.gad_bt
  193.          IF (aslbase:=OpenLibrary('asl.library', 38))
  194.             self.set(PLA_PopAsl_Disabled, TRUE)
  195.             x:=self.type
  196.             SELECT x
  197.                CASE PLV_PopAsl_Type_Drawer
  198.                   reqtype:=ASL_FILEREQUEST
  199.                   tags:=[ASLFR_WINDOW, win,
  200.                          ASLFR_SLEEPWINDOW, TRUE,
  201.                          ASLFR_TITLETEXT, 'Select Drawer',
  202.                          ASLFR_INITIALDRAWER, buffer,
  203.                          ASLFR_DRAWERSONLY, TRUE,
  204.                          TAG_DONE]
  205.                CASE PLV_PopAsl_Type_File
  206.                   reqtype:=ASL_FILEREQUEST
  207.                   s1:=PathPart(buffer)-1
  208.                   s1:=String(len:=(s1-buffer)+2)
  209.                   StrCopy(s1, buffer, len-1)
  210.                   tags:=[ASLFR_WINDOW, win,
  211.                          ASLFR_SLEEPWINDOW, TRUE,
  212.                          ASLFR_TITLETEXT, 'Select File',
  213.                          ASLFR_INITIALFILE, FilePart(buffer),
  214.                          ASLFR_INITIALDRAWER, s1,
  215.                          TAG_DONE]
  216.                CASE PLV_PopAsl_Type_Font
  217.                   reqtype:=ASL_FONTREQUEST
  218.                   s1:=PathPart(buffer)
  219.                   len:=s1-buffer
  220.                   IF len  -> name/size
  221.                      s1:=String(len)
  222.                      StrCopy(s1, buffer,len)
  223.                   ELSE    -> name
  224.                      s1:=String(StrLen(buffer)+2)
  225.                      StrCopy(s1, buffer)
  226.                   ENDIF
  227.                   x:=Val(FilePart(buffer), {len})
  228.                   tags:=[ASLFO_WINDOW, win,
  229.                          ASLFO_SLEEPWINDOW, TRUE,
  230.                          ASLFO_TITLETEXT, 'Select Font',
  231.                          ASLFO_INITIALNAME, s1,
  232.                          ASLFO_INITIALSIZE, IF len>0 THEN x ELSE 8,
  233.                          TAG_DONE]
  234.             ENDSELECT
  235.             IF (filereq:=AllocAslRequest(reqtype, NIL))
  236.                res:=AslRequest(filereq, tags)
  237.  
  238.                IF res
  239.                   Dispose(self.string)
  240.  
  241.                   x:=self.type
  242.                   SELECT x
  243.                      CASE PLV_PopAsl_Type_Drawer
  244.                         self.string:=String(StrLen(filereq.drawer)+1)
  245.                         StrCopy(self.string, filereq.drawer)
  246.                      CASE PLV_PopAsl_Type_File
  247.                         self.string:=String(len:=(StrLen(filereq.drawer)+StrLen(filereq.file)+2))
  248.                         StrCopy(self.string, filereq.drawer)
  249.                         AddPart(self.string, filereq.file, len)
  250.                         SetStr(self.string, StrLen(self.string))
  251.                      CASE PLV_PopAsl_Type_Font
  252.                         fontreq:=filereq
  253.                         s:=fontreq.attr::textattr.name
  254.                         self.string:=String(StrLen(s)+1+6)
  255.                         IF self.noext
  256.                            len:=InStr(s,'.font')
  257.                            IF len<>-1 THEN s[len]:=0
  258.                         ENDIF
  259.                         StringF(self.string, '\s/\d', s,fontreq.attr::textattr.ysize)
  260.                         IF self.noext THEN s[len]:="."
  261.                   ENDSELECT
  262.  
  263.                   Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  264.                ENDIF
  265.                FreeAslRequest(filereq)
  266.             ELSE
  267.                Raise("AREQ")
  268.             ENDIF
  269.             self.set(PLA_PopAsl_Disabled, FALSE)
  270.             CloseLibrary(aslbase)
  271.          ELSE
  272.             Raise("ASL")
  273.          ENDIF
  274.          IF s1 THEN Dispose(s1)
  275.          -> don't call action function on cancel
  276.          IF res=0 THEN RETURN FALSE
  277.       ELSE
  278.          IF self.imsg.iaddress=self.gad_str
  279. ->            IF code=9
  280. ->            ELSE
  281.                Dispose(self.string)
  282.                self.string:=String(StrLen(buffer)+1)
  283.                StrCopy(self.string, buffer)
  284. ->            ENDIF
  285.          ENDIF
  286.       ENDIF
  287.    ENDIF
  288.  
  289. ENDPROC TRUE
  290. -><<
  291.  
  292. ->-- new methods ---------------------------------------------
  293.  
  294. ->>> popasl::set
  295. PROC set(attr, value) OF popasl_plugin
  296. DEF x
  297.  
  298.    SELECT attr
  299.       CASE PLA_PopAsl_Disabled
  300.          self.disabled:=value
  301.          Gt_SetGadgetAttrsA(self.gad_bt,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  302.          Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GA_DISABLED,self.disabled,TAG_DONE])
  303.       CASE PLA_PopAsl_Contents
  304.          IF value
  305.             Dispose(self.string)
  306.             self.string:=String(StrLen(value)+1)
  307.             StrCopy(self.string, value)
  308.             Gt_SetGadgetAttrsA(self.gad_str,self.gh.wnd,NIL,[GTST_STRING,self.string,TAG_DONE])
  309.          ENDIF
  310.    ENDSELECT
  311.  
  312. ENDPROC
  313. -><<
  314.  
  315. ->>> popasl::get
  316. PROC get(attr) OF popasl_plugin
  317.  
  318.    SELECT attr
  319.       CASE PLA_PopAsl_Disabled
  320.          RETURN self.disabled, TRUE
  321.       CASE PLA_PopAsl_Contents
  322.          self.clear_render(NIL)      -> copy input buffer to self.string
  323.          RETURN self.string, TRUE
  324.    ENDSELECT
  325.  
  326. ENDPROC -1, FALSE
  327. -><<
  328.  
  329.